// pages/access/scan-result.js
const api = require('../../utils/api');

Page({
  /**
   * 页面的初始数据
   */
  data: {
    qrCode: '', // 扫码结果
    isProcessing: false, // 是否正在处理开门请求
    doorStatus: '', // 门禁状态：opening, opened, closing, closed
    countdown: 0, // 倒计时秒数
    storeInfo: null, // 门店信息
    deviceInfo: null, // 设备信息
    errorMessage: '' // 错误信息
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const { code } = options;
    if (code) {
      this.setData({ qrCode: code });
      this.parseQRCode(code);
    } else {
      this.showError('未获取到扫码结果');
    }
  },

  /**
   * 解析二维码内容
   */
  parseQRCode(code) {
    try {
      // 尝试解析JSON格式的二维码
      const qrData = JSON.parse(code);
      
      // 只支持新的门禁二维码格式 access_control（精简版）
      if (qrData.type === 'access_control' && qrData.storeId && qrData.topic) {
        this.setData({
          storeInfo: {
            storeId: qrData.storeId,
            storeName: qrData.storeName || '门店'
          },
          qrCodeData: qrData // 保存完整的二维码数据
        });
        
        // 显示确认开门界面
        this.showConfirmDialog();
      } else {
        this.showError('无效的门禁二维码格式');
      }
    } catch (error) {
      this.showError('无法解析二维码内容');
    }
  },



  /**
   * 显示确认开门对话框
   */
  showConfirmDialog() {
    const { storeInfo } = this.data;
    
    wx.showModal({
      title: '确认开门',
      content: `确定要打开${storeInfo.storeName}的门禁吗？`,
      confirmText: '开门',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          this.openDoor();
        } else {
          // 用户取消，返回上一页
          wx.navigateBack();
        }
      }
    });
  },

  /**
   * 开门操作
   */
  async openDoor() {
    const { storeInfo, qrCodeData } = this.data;
    
    this.setData({
      isProcessing: true,
      doorStatus: 'opening',
      errorMessage: ''
    });

    try {
      // 调用门禁开门API（使用新的精简参数）
      const result = await api.callCloudFunction('access', 'openDoor', {
        storeId: storeInfo.storeId,
        topic: qrCodeData.topic
      });

      if (result.success) {
        // 开门成功，开始倒计时
        this.setData({
          doorStatus: 'opened',
          countdown: 10
        });
        
        this.startCountdown();
        
        wx.showToast({
          title: '开门成功，10秒后自动关闭',
          icon: 'success',
          duration: 2000
        });
      } else {
        this.showError(result.message || '开门失败');
      }
    } catch (error) {
      console.error('开门请求失败:', error);
      this.showError('网络请求失败，请重试');
    } finally {
      this.setData({ isProcessing: false });
    }
  },

  /**
   * 开始倒计时
   */
  startCountdown() {
    const timer = setInterval(() => {
      const { countdown } = this.data;
      
      if (countdown > 1) {
        this.setData({ countdown: countdown - 1 });
      } else {
        // 倒计时结束，门自动关闭
        clearInterval(timer);
        this.setData({
          doorStatus: 'closed',
          countdown: 0
        });
        
        wx.showToast({
          title: '门已自动关闭',
          icon: 'success'
        });
        
        // 3秒后返回首页
        setTimeout(() => {
          wx.switchTab({
            url: '/pages/home/index/index'
          });
        }, 3000);
      }
    }, 1000);
  },

  /**
   * 显示错误信息
   */
  showError(message) {
    this.setData({ errorMessage: message });
    
    wx.showToast({
      title: message,
      icon: 'none',
      duration: 3000
    });
  },

  /**
   * 重新扫码
   */
  rescan() {
    wx.navigateBack();
  },

  /**
   * 返回首页
   */
  goHome() {
    wx.switchTab({
      url: '/pages/home/index/index'
    });
  }
});